package com_.dxy_test_.function_;

import java.util.HashMap;
import java.util.Map;
import java.util.function.Function;

/**
 * 使用Map和函数式接口代替if-else结构
 */
public class FunctionTest {

    private final Map<String, Function<String, String>> map = new HashMap<>();

    public FunctionTest() {
        map.put("CAT", this::catSpeak);
        map.put("DOG", this::dogSpeak);
    }

    /**
     * 打招呼（对外暴露的方法）
     *
     * @param master 主人，CAT，DOG，张三，
     * @param guest  客人
     */
    public void sayHello(String master, String guest) {
        Function<String, String> function = map.getOrDefault(master, this::defaultSpeak);
        System.out.println(function.apply(guest));
    }

    public static void main(String[] args) {
        FunctionTest functionTest = new FunctionTest();
        functionTest.sayHello("CAT", "李四");
        functionTest.sayHello("DOG", "李四");
        functionTest.sayHello("张三", "李四");
    }

    /**
     * 小猫叫
     *
     * @param name
     * @return
     */
    private String catSpeak(String name) {
        return name + "，你好，喵喵喵~";
    }

    /**
     * 小狗叫
     *
     * @param name
     * @return
     */
    private String dogSpeak(String name) {
        return name + "，你好，汪汪汪~";
    }

    /**
     * 不知道什么的叫声
     *
     * @param name
     * @return
     */
    private String defaultSpeak(String name) {
        return name + "，你好，啊不要停~";
    }
}
